package define.Demo_03;

import java.util.Scanner;

public class StudentTest {
    public static void main(String[] args) {
        Student st1 = new Student("001", "张三", 20);
        Student st2 = new Student("002", "李四", 22);
        Student st3 = new Student("003", "王五", 21);
        Student st4 = new Student("004", "赵六", 23);
        Student[] arrs = new Student[3];
        arrs[0] = st1;
        arrs[1] = st2;
        arrs[2] = st3;
        //判断是否重复
        boolean  flag = contain(st4.getId(), arrs);
        int contain = isFull(arrs);
        //判断是否已满，并确定位置
        if(isFull(arrs)== arrs.length){
            //已经存满
            //创建新数组长度为旧数组长度加一
            Student[] newarr = creatnewarr(arrs);
            newarr[contain] = st4;
            printArr(newarr);
            }else {
                //数组未存满
                arrs[contain] = st4;
                printArr(arrs);
        }

        //通过ID删除学生信息
        System.out.println("请输入需要删除的学生信息");
        Scanner scanner = new Scanner(System.in);
        String id = scanner.next();


    }


    /**
     * 判断学生ID在给定数组中是否重复
     * 此方法用于检查一个学生ID是否已经存在于一个学生对象数组中，以避免ID重复
     * 它通过遍历数组并比较每个学生对象的ID来实现如果找到相同的ID，则视为重复
     *
     * @param id 要检查的学生ID
     * @param arr 存储学生对象的数组
     * @return 如果数组中存在相同的ID，则返回true，表示ID重复；否则返回false，表示ID不重复
     */
    public static boolean contain(String id, Student[] arr){
        // 遍历学生对象数组
        for (Student student : arr) {
            // 比较当前学生对象的ID与传入的ID是否相等
            if (student.getId().equals(id)) {
                // 如果发现重复的ID，打印重复信息并返回true
                System.out.println("%d" + student.toString() + "出现重复！");
                return true;
            }
        }
        // 如果没有找到重复的ID，打印允许添加信息并返回false
        System.out.println("没有重复！允许添加");
        return false;
    }
    /**
 * 判断学生数组中有多少个元素已被填充
 * 该方法通过遍历数组，检查每个位置是否为null来判断
 *
 * @param arr 学生对象数组，用于存放学生实例
 * @return 数组中非null元素的数量，即已存入的学生数量
 */
public static int isFull(Student[] arr){
    // 初始化计数器，用于统计非null元素的数量
    int count = 0;
    // 遍历数组，检查每个元素是否为null
    for (int i = 0; i < arr.length; i++) {
        // 如果当前元素不为null，则计数器加一
        if (arr[i] != null) {
            count++;
        }
    }
    // 返回已填充的元素数量
    return count;
}

/**
 * 创建一个新的学生数组，其长度比给定数组多1
 * 该方法用于在不改变原数组的情况下，生成一个新数组，新数组包含原数组的所有元素，并且有一个位置是空的，用于后续添加新的学生对象
 *
 * @param arr 原始的学生数组，不为空
 * @return 返回一个新的学生数组，其长度比原数组多1，最后一个位置未赋值
 */
public static Student[] creatnewarr(Student[] arr){
    // 创建一个新的学生数组，长度比原数组多1
    Student[] newarr = new Student[arr.length + 1];

    // 遍历原数组，将原数组中的元素复制到新数组中
    for (int i = 0; i < arr.length; i++) {
        newarr[i] = arr[i];
    }

    // 返回新创建的学生数组
    return newarr;
}

public static void printArr(Student[] arr){
    for (int i = 0; i < arr.length; i++) {
        Student student1 = arr[i];
        if (student1 != null) {
            System.out.println(student1.toString());
        }
    }
}



}

